package cn.com.java8newly;

import java.util.Comparator;

/**
 * @ wenbin
 * @ date 2019/1/29
 */
/*
 *我们也可以直接在 lambda 表达式中访问外层的局部变量：
 * */
public class LambdaJava8Tester3 {
    public static void main(String args[]) {
/*        final int num = 1;
        Converter<Integer, String> s = (param) -> System.out.println(String.valueOf(param + num));
        s.convert(2);  // 输出结果为 3
        Converter<String,String>s1= (p) -> System.out.println(p+num);
        s1.convert(101);*/
//     lambda 表达式的局部变量可以不用声明为 final，但是必须不可被后面的代码修改（即隐性的具有 final 的语义）

/*        int num = 1;
        Converter<Integer, String> s = (param) -> System.out.println(String.valueOf(param + num));
        s.convert(2);
        num = 5;
//报错信息：Local variable num defined in an enclosing scope must be final or effectively final
 */

/* 在 Lambda 表达式当中不允许声明一个与局部变量同名的参数或者局部变量。*/

/*        String firstP = "dddd";
        String secondP="ee";
        Comparator<String> comparator = (first, second) -> Integer.compare(first.length(), second.length());
        //编译会出错
        System.out.println(comparator.compare(firstP,secondP));*/
//lamda使用场景1
//        Thread t1 = new Thread(new Runnable() {
//            @Override
//            public void run() {
//                System.out.println("no use lambda");
//            }
//        });

        Thread t2 = new Thread(() -> System.out.println("use lambda"));
            }

    public interface Converter<T1, T2> {
        void convert(int i);
    }

}
